﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

//代码练习——分支和循环
//
//if语句

//判断一个输入的整数是奇数还是偶数
//int main()
//{
//	int a = 0;
//	scanf("%d", &a);
//	if (a % 2 == 1)
//	{
//		printf("%d是奇数\n", a);
//	}
//	else
//	{
//		printf("%d是偶数\n", a);
//	}
//	return 0;
//}

//判断一个输入的整数是正数 负数还是0
//int main()
//{
//	int a = 0;
//	scanf("%d", &a);
//	if (a > 0)
//	{
//		printf("正数\n");
//	}
//	else if (a < 0)
//	{
//		printf("负数\n");
//	}
//	else
//	{
//		printf("零\n");
//	}
//	return 0;
//}


//条件操作符（三目操作符） ？ ：
//int main()
//{
//	int a = 0, b = 0, c = 0;
//	int max =0;
//	scanf("%d %d %d", &a, &b, &c);
//
//	max = a > 0 ? b : c;//方法一 使用三目操作符
//	printf("%d\n", max);
//
//	if (a > 0)
//		printf("%d\n", b);//方法二 使用分支语句判断
//	else
//		printf("%d\n", c);
//	
//
//	//两种方法的效果是相同的
//	return 0;
//}​



//短路求值
//一、逻辑与操作符短路求值问题

//int main()
//{
//	int i = 0, a = 0, b = 2, c = 3,d = 4;
//	i = a++ && ++b && d++;  //i的值输出的是整个表达式的结果——0或1
//	//首先a++ 后置++，先使用再++
//	// 因为a=0，逻辑与：一边为假则为假，逻辑运算符后面的内容不再做计算，该表达式只执行a++
//	
//	printf(" a = %d\n b = %d\n c = %d\n d = %d\n", a, b, c, d);
//	printf(" i = %d\n", i);  
//	return 0;
//}

//int main()
//{
//	int i = 0, a = 2, b = 2, c = 3, d = 4;
//	i = a++ && ++b && d++;
//	//a=2, 后置++先使用，a++，a赋值为3  a的初始值为非0所以&&右边继续执行
//	//b=2，前置++先++，b赋值为3  ++b的结果为非0所以&&右边继续执行
//	//d=4，d++，d赋值为5
//	printf(" a = %d\n b = %d\n c = %d\n d = %d\n", a, b, c, d);
//	printf(" i = %d\n", i);
//	return 0;
//}
 

//int main()
//{
//	int i = 0, a = 2, b = 2, c = 3, d = 4;
//	i = a++ || ++b || d++; //只执行a++，a赋值为3
//	//因为a = 2，逻辑或：一边为真则为真，逻辑运算符后面的内容不再做计算，该表达式只执行a++
//	printf(" a = %d\n b = %d\n c = %d\n d = %d\n", a, b, c, d);
//	printf(" i = %d\n", i);
//	return 0;
//}

//int main()
//{
//	int i = 0, a = 0, b = 2, c = 3, d = 4;
//	i = a++ || ++b || d++;
//	//a=0，后置++先使用，所以||右边继续执行，并且a++，a赋值为1
//	//b=2，前置++先计算，++b，b赋值为3，逻辑或：一边为真则为真，所以右边不再执行
//	printf(" a = %d\n b = %d\n c = %d\n d = %d\n", a, b, c, d);
//	printf(" i = %d\n", i);
//	return 0;
//}

//switch语句

//int main()
//{
//	int n = 0;
//	scanf("%d", &n);  
//	switch (n % 3)   // switch后面括号内必须是整型表达式
//	{
//	case 1:          //case后面必须跟整型常量表达式 int long short char类型
//		             //case后面带冒号：
//	{
//		printf("%d%3的余数为1", n);
//		break;       //case后面的代码如果不带break语句，代码会一直执行下去，直到遇见break语句
//	}	             //所以case后面的语句可以不带大括号，以break作为分界点
//	case 2:
//		printf("%d%3的余数为2", n);
//		break;
//	case 3:
//		printf("%d%3的余数为3", n);
//		break;
//	default:
//		printf("%d%3的余数为0", n);
//		break;
//	}
//
//	return 0;
//}

//int main()
//{
//	int day = 0;
//	scanf("%d", &day);
//	switch (day)
//	{
//		case 1:
//		case 2:
//		case 3:
//		case 4:
//		case 5:
//			printf("⼯作⽇\n");
//			break;
//		case 6:
//		case 7:
//			printf("休息⽇\n");
//			break;
//	}
//	return 0;
//}

//int main()
//{
//	int day = 0;
//	scanf("%d", &day);
//	switch (day)
//	{
//	case 1:
//	case 2:
//	case 3:
//	case 4:
//	case 5:
//		printf("工作日\n");
//		break;
//	case 6:
//	case 7:
//		printf("星期天\n");
//		break;
//	default:
//		printf("输出错误\n");
//		break;
//	}
//	return 0;
//}

//while循环
//输⼊⼀个正的整数，逆序打印这个整数的每⼀位
//int main()
//{
//	int a = 0;
//	scanf("%d", &a);
//	while (a)//a作为一个变量很巧妙得用来控制循环——当最后一个数字被输出之后，a变为0，循环结束
//	{
//		printf("%d ", a % 10);//每次输出最后一位，即除以10的余数
//		a = a / 10;//输出最后一位之后，通过除以10取整，去掉最后一位
//	}
//	return 0;
//}

//for循环
//打印n个*
//int main()
//{
//	int a = 0;
//	scanf("%d", &a);
//	for (int i = 1; i <= a; i++)
//		printf("*");
//	printf("\n");
//	return 0;
//}


//do while循环
//输⼊⼀个正整数，计算这个整数是⼏位数
//do while循环与while的区别是do while循环先执行一次再进行判断
//这里使用do while循环实现很合适，因为即使是0，也是一位数
//int main()
//{
//	int a = 0;//这里是循环变量的初始化部分
//	int count = 0;
//	scanf("%d", &a);
//	int temp = a;//因为输入的整数会被破坏，所以这里先使用一个临时变量存储起来
//	do
//	{
//		count++;
//		a = a / 10; //这里是循环的调整部分
//	} while (a);//这里是循环的判断部分 注意while后面不要忘记写分号
//
//	printf("%d是%d位数\n", temp, count);
//	return 0;
//
//}
//
////输⼊⼀个正整数，计算这个整数是⼏位数
////使用while循环的实现方法
//int main()
//{
//	int a = 0;
//	int count = 0;
//	scanf("%d", &a);
//	int temp = a;
//	if (temp == 0)  //与do while循环相比，这里多了一个if语句
//		temp++;     //保证即使输入0的时候while循环也能执行一次
//
//	while (temp)
//	{
//		count++;
//		temp = temp / 10;
//	}
//	printf("%d是%d位数\n", a, count);
//	return 0;
//}
//输⼊⼀个正整数，计算这个整数是⼏位数
//使用do while循环的实现方法
//int main()
//{
//	int a = 0;
//	int count = 0;
//	scanf("%d", &a);
//	int temp = a;//用临时拷贝的值进行操作，防止破坏原来的值
//	
//	do
//	{
//		count++;
//		temp = temp / 10;
//	} while (temp);
//	
//	printf("%d是%d位数\n", a, count);
//	return 0;
//}
//
//break 和continue

////break和continue在while循环中
// 需要注意在while循环中使用continue可能会跳过循环的变量调整部分，导致死循环
// //
//int main()
//{
	//初始代码
	/*int i = 1;
	while (i <= 10)
	{
		printf("%d ", i);
		i++;
	}
	printf("\n");*/


	//在while循环中使用break
	//int i = 1;
	//while (i <= 10)
	//{
	//	if (i == 5)
	//		break;  //循环执行到i=5，break跳出循环，只打印1 2 3 4
	//	printf("%d ", i);
	//	i++;
	//}
	//printf("\n");

	//在while循环中使用continue
	// 要注意在while中使用continue可能会跳过循环中的循环变量调整部分，陷入死循环
//	int i = 1;
//	while (i <= 10)
//	{
//		if (i == 5)
//			continue;  //循环执行到i=5，continue跳过后面的代码，直接进入下一次循环
//					   //因为continue在循环变量调整部分之前，所以跳过了变量调整
//					   //即使程序也是打印1 2 3 4，但是却陷入了死循环
//		printf("%d ", i);
//		i++;
//	}
//	printf("\n");
//
//	return 0;
//}


//break和continue在for循环中
//int main()
//{
	//初始代码
	/*for (int i = 1; i <= 10; i++)
	{
		printf("%d ", i);
	}
	printf("\n");*/

	//在while循环中使用break
	//for (int i = 1; i <= 10; i++)
	//{
	//	if (i == 5)
	//		break;//循环执行到i=5，break跳出循环，只打印1 2 3 4
	//			  //要注意break只能跳出一层循环
	//	printf("%d ", i);
	//}
	//printf("\n");


	//在for循环中使用continue
	//for (int i = 1; i <= 10; i++)
	//{
	//	if (i == 5)
	//		continue; //循环执行到i = 5，continue跳过后面的代码，直接进入下一次循环
	//				  //程序执行跳过5，输出1 2 3 4 6 7 8 9 10
	//	
	//	printf("%d ", i);
	//}
	//printf("\n");


//	return 0;
//}